package com_11;
/*
使用UDP协议创建发送数据端口和接受数据端口，并使用多线程思想
 */

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class Test {//定义一个测试类

    public static void main(String[] args) throws Exception {
        //main方法抛出异常
        DatagramSocket dgs = new DatagramSocket(10086);//创建udp对象
        new Thread(new Runnable() {//使用匿名对象，创建接口
            @Override
            public void run() {//重写接口中的方法
                Scanner sc = new Scanner(System.in);//
                while (true) {//使用while循环进行发送数据
//                    String s = sc.nextLine();//
//                    if ("886".equals(s)) {
//                        System.exit(0);
//                    }
                    byte[] bytes = "陕西西安".getBytes();//定义发送数据的字符
                    try {
                        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.29.59"), 10086);
                        //包装需要发送的数据
                        dgs.send(dp);//将打包的数据进行发送
                    } catch (UnknownHostException e) {//捕获异常
                        e.printStackTrace();//捕获异常
                    } catch (IOException e) {//捕获异常
                        e.printStackTrace();//捕获异常
                    }
                }
            }
        }).start();//开始多线程
        new Thread(new Runnable() {//使用匿名内部类创建接受数据端口
            @Override
            public void run() {//重写接口中个方法
                byte[] bytes = new byte[1024];//定义读取数据的长度
                DatagramPacket dp = new DatagramPacket(bytes, bytes.length);//包装读取的数据
                try {//
                    dgs.receive(dp);//接受数据
                    int length = dp.getLength();//获取数据的有效长度
                    System.out.println(new String(bytes, 0, length));//在控制台输出读取的数据

                } catch (IOException e) {//捕获异常
                    e.printStackTrace();//捕获异常后，异常对象会调用异常类中方法进行处理
                }
            }
        }).start();//开始多线程，也就会接受数据的端口
    }

}
